package com.lingshu.core.eventbus;

import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

/**
 * @author 于定金
 * @version 1.0
 * @Date 2024/4/12 9:34
 * @Description
 */
public abstract class BaseSubscriber<T> {
    protected EventKey key;
    public BaseSubscriber(EventKey key) {
        this.key = key;
    }

    /**
     * 默认 threadMode = ThreadMode.POSTING ，非粘性事件
     * 有需要特殊 Subscribe 的情况， 子类直接覆盖按需实现
     */
    @Subscribe(threadMode = ThreadMode.POSTING)
    public void onSubscribeEvent(EventData<T> eventData) {
        if (eventData != null && eventData.getKey() == key) {
            notifyDataChanged(eventData.getValue());
        }
    }

    /**
     * -- Subscribe 代理方法 --
     * onSubscribeEvent 匹配到对应事件 下发通知
     * 避免到处写 Subscribe注解
     * --- 如有特殊情况，特殊处理 ---
     *
     * @param value 自定义类型数据
     */
    protected abstract void notifyDataChanged(T value);
}
